ASP.NET Core Authentication এবং Authorization

Microsoft Technologies - এএসপি ডট নেট কোর (ASP.Net Core)
254
254

ASP.NET Core-এ Authentication এবং Authorization হলো দুটি গুরুত্বপূর্ণ সিকিউরিটি ফিচার, যা অ্যাপ্লিকেশনের ব্যবহারকারী যাচাইকরণ এবং তাদের অ্যাক্সেস নিয়ন্ত্রণের জন্য ব্যবহৃত হয়। Authentication এর মাধ্যমে ব্যবহারকারীর পরিচয় নিশ্চিত করা হয়, এবং Authorization নির্ধারণ করে ব্যবহারকারী অ্যাপ্লিকেশনের কোন অংশে অ্যাক্সেস করতে পারবে।


Authentication

Authentication এর কাজ হলো ব্যবহারকারীর পরিচয় যাচাই করা। ASP.NET Core বিভিন্ন ধরনের Authentication পদ্ধতি সমর্থন করে, যেমন:

  • Cookie-based Authentication
  • JWT (JSON Web Token) Authentication
  • OAuth এবং OpenID Connect
  • ASP.NET Core Identity

Cookie-based Authentication

Cookie-based Authentication হলো ASP.NET Core এর ডিফল্ট Authentication মেকানিজম। এটি ব্যবহারকারীর লগইন সেশনের তথ্য Cookie-তে সংরক্ষণ করে।

সেটআপ:
  1. Startup.cs-এ Middleware যুক্ত করুন:

    services.AddAuthentication("MyCookieAuth")
        .AddCookie("MyCookieAuth", options =>
        {
            options.LoginPath = "/Account/Login";
            options.AccessDeniedPath = "/Account/AccessDenied";
        });
    
  2. Middleware সক্রিয় করুন:

    app.UseAuthentication();
    app.UseAuthorization();
    
  3. লগইন প্রক্রিয়া তৈরি করুন:

    public async Task<IActionResult> Login(string username, string password)
    {
        if (username == "admin" && password == "password")
        {
            var claims = new List<Claim>
            {
                new Claim(ClaimTypes.Name, username),
                new Claim(ClaimTypes.Role, "Admin")
            };
            var identity = new ClaimsIdentity(claims, "MyCookieAuth");
            var principal = new ClaimsPrincipal(identity);
            await HttpContext.SignInAsync("MyCookieAuth", principal);
    
            return RedirectToAction("Index", "Home");
        }
        return View();
    }
    

JWT (JSON Web Token) Authentication

JWT হলো টোকেন-ভিত্তিক Authentication, যা সাধারণত Web API-তে ব্যবহৃত হয়। এটি নিরাপদ এবং স্ট্যাটলেস পদ্ধতিতে কাজ করে।

সেটআপ:
  1. NuGet প্যাকেজ যুক্ত করুন:

    dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
    
  2. Startup.cs-এ JWT সেটআপ করুন:

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                ValidIssuer = "yourIssuer",
                ValidAudience = "yourAudience",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"))
            };
        });
    
  3. Middleware সক্রিয় করুন:

    app.UseAuthentication();
    app.UseAuthorization();
    
  4. JWT টোকেন জেনারেট করুন:

    public string GenerateJwtToken()
    {
        var claims = new[]
        {
            new Claim(JwtRegisteredClaimNames.Sub, "username"),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
        };
    
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
    
        var token = new JwtSecurityToken(
            issuer: "yourIssuer",
            audience: "yourAudience",
            claims: claims,
            expires: DateTime.Now.AddMinutes(30),
            signingCredentials: creds);
    
        return new JwtSecurityTokenHandler().WriteToken(token);
    }
    

Authorization

Authorization নির্ধারণ করে যে, কোন ব্যবহারকারী অ্যাপ্লিকেশনের কোন রিসোর্স বা ফাংশনে অ্যাক্সেস করতে পারবে। ASP.NET Core-এ দুই ধরনের Authorization ব্যবহৃত হয়:

  • Role-based Authorization
  • Policy-based Authorization

Role-based Authorization

Role-based Authorization ব্যবহারকারীর নির্ধারিত রোলের উপর ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ করে।

কনফিগারেশন:
  1. রোল অ্যাসাইন করুন:

    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.Name, "admin"),
        new Claim(ClaimTypes.Role, "Admin")
    };
    
  2. Controller বা Action Method-এ [Authorize] অ্যাট্রিবিউট ব্যবহার করুন:

    [Authorize(Roles = "Admin")]
    public IActionResult AdminOnly()
    {
        return View();
    }
    

Policy-based Authorization

Policy-based Authorization আরো ফাইন-গ্রেইন কন্ট্রোল প্রদান করে এবং কাস্টম নিয়ম তৈরি করতে ব্যবহৃত হয়।

পলিসি তৈরি:
  1. Startup.cs-এ পলিসি কনফিগার করুন:

    services.AddAuthorization(options =>
    {
        options.AddPolicy("MustBeAdmin", policy =>
            policy.RequireRole("Admin"));
    });
    
  2. পলিসি অ্যাপ্লাই করুন:

    [Authorize(Policy = "MustBeAdmin")]
    public IActionResult AdminPage()
    {
        return View();
    }
    

Authentication এবং Authorization Middleware

ASP.NET Core-এ UseAuthentication এবং UseAuthorization Middleware ব্যবহৃত হয়, যা Startup.cs ফাইলে Configure মেথডে যুক্ত করা হয়।

app.UseAuthentication();
app.UseAuthorization();

ASP.NET Core Identity

ASP.NET Core Identity হলো বিল্ট-ইন Authentication এবং Authorization ফ্রেমওয়ার্ক, যা ব্যবহারের মাধ্যমে সহজেই ব্যবহারকারী ম্যানেজমেন্ট সিস্টেম (লগইন, রেজিস্ট্রেশন, পাসওয়ার্ড রিসেট) তৈরি করা যায়।

সেটআপ:
  1. Identity যুক্ত করুন:

    services.AddIdentity<IdentityUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>();
    
  2. Middleware যুক্ত করুন:

    app.UseAuthentication();
    app.UseAuthorization();
    

সারাংশ

ASP.NET Core এর Authentication এবং Authorization অ্যাপ্লিকেশনকে নিরাপদ রাখতে এবং ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি কাস্টমাইজযোগ্য এবং বিভিন্ন Authentication মেকানিজম যেমন Cookie, JWT, এবং OAuth সমর্থন করে। Role-based এবং Policy-based Authorization অ্যাপ্লিকেশনে শক্তিশালী এবং ফাইন-গ্রেইন অ্যাক্সেস নিয়ন্ত্রণ প্রদান করে।

common.content_added_by

Authentication এর মৌলিক ধারণা (Cookie-based, JWT, OAuth)

201
201

Authentication হলো এমন একটি প্রক্রিয়া, যা নিশ্চিত করে যে একটি অ্যাপ্লিকেশনে প্রবেশকারী ব্যবহারকারী বৈধ এবং অনুমোদিত কিনা। Authentication সঠিকভাবে কাজ করার মাধ্যমে অ্যাপ্লিকেশনটি নিশ্চিত হয় যে ব্যবহারকারী কে। এটি একটি নিরাপত্তা ব্যবস্থার অন্যতম গুরুত্বপূর্ণ ধাপ।

ASP.NET Core-এ Authentication বিভিন্ন পদ্ধতি ব্যবহার করে ইমপ্লিমেন্ট করা যায়, যেমন Cookie-based Authentication, JWT (JSON Web Token) এবং OAuth


Authentication কীভাবে কাজ করে

Authentication সাধারণত তিনটি ধাপে কাজ করে:

  1. Credential সংগ্রহ করা: ব্যবহারকারী তার ক্রেডেনশিয়াল (যেমন ইউজারনেম এবং পাসওয়ার্ড) প্রদান করে।
  2. Credential যাচাই করা: অ্যাপ্লিকেশন বা Authentication সার্ভার ক্রেডেনশিয়াল যাচাই করে।
  3. Access প্রদান করা: ক্রেডেনশিয়াল বৈধ হলে ব্যবহারকারীকে সিস্টেমে প্রবেশ করার অনুমতি দেওয়া হয়।

Authentication সফল হলে সাধারণত একটি Token বা Session তৈরি হয়, যা ব্যবহারকারীকে সিস্টেমে অনুমোদিত রাখতে ব্যবহৃত হয়।


Cookie-based Authentication

ধারণা

Cookie-based Authentication হলো ক্লাসিক্যাল Authentication পদ্ধতি, যেখানে ব্যবহারকারীর লগইন সফল হলে সার্ভারে একটি সেশন তৈরি হয় এবং ক্লায়েন্টের ব্রাউজারে একটি Cookie পাঠানো হয়। এই Cookie প্রতিটি অনুরোধে সার্ভারে ফেরত পাঠানো হয়, যা ব্যবহারকারীকে যাচাই করতে সাহায্য করে।

বৈশিষ্ট্য

  • সার্ভার সেশনের অবস্থা ট্র্যাক করে।
  • ক্লায়েন্ট ব্রাউজারে Cookie সংরক্ষণ করা হয়।
  • সাধারণত ছোট অ্যাপ্লিকেশনের জন্য কার্যকর।

কাজের ধাপ

  1. ব্যবহারকারী লগইন করে এবং সার্ভারে সেশন তৈরি হয়।
  2. সার্ভার থেকে একটি Cookie ক্লায়েন্টে পাঠানো হয়।
  3. ক্লায়েন্ট প্রতিটি অনুরোধের সাথে Cookie পাঠায় এবং সার্ভার এটি যাচাই করে।

উদাহরণ

services.AddAuthentication("CookieAuth")
    .AddCookie("CookieAuth", options =>
    {
        options.LoginPath = "/Account/Login";
        options.Cookie.Name = "AuthCookie";
    });

JWT (JSON Web Token)

ধারণা

JWT (JSON Web Token) একটি টোকেন-ভিত্তিক Authentication পদ্ধতি, যেখানে সার্ভার একটি সাইন করা টোকেন জেনারেট করে এবং ক্লায়েন্টে পাঠায়। এই টোকেনটি প্রতিটি অনুরোধের সাথে সার্ভারে ফেরত পাঠানো হয় এবং যাচাই করা হয়।

বৈশিষ্ট্য

  • Stateless Authentication পদ্ধতি (কোনো সেশন সংরক্ষণ করা হয় না)।
  • টোকেনটি ক্লায়েন্টে সংরক্ষণ করা হয় (সাধারণত LocalStorage বা Cookie তে)।
  • RESTful API এবং মাইক্রোসার্ভিসের জন্য উপযুক্ত।

কাজের ধাপ

  1. ব্যবহারকারী লগইন করে এবং সার্ভার একটি JWT টোকেন তৈরি করে।
  2. ক্লায়েন্টে টোকেন সংরক্ষণ করা হয়।
  3. প্রতিটি অনুরোধে টোকেন Authorization Header-এর মাধ্যমে পাঠানো হয়।
  4. সার্ভার টোকেন যাচাই করে এবং প্রবেশাধিকার প্রদান করে।

উদাহরণ

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        ValidIssuer = "yourIssuer",
        ValidAudience = "yourAudience",
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yourSecretKey"))
    };
});

OAuth

ধারণা

OAuth (Open Authorization) হলো একটি ওপেন স্ট্যান্ডার্ড প্রোটোকল, যা তৃতীয় পক্ষের অ্যাপ্লিকেশনকে ব্যবহারকারীর ডেটা অ্যাক্সেস করার অনুমতি দেয়, কিন্তু তাদের পাসওয়ার্ড শেয়ার করতে হয় না। এটি টোকেন ভিত্তিক Authentication পদ্ধতি।

বৈশিষ্ট্য

  • বহিরাগত সিস্টেমের মাধ্যমে অনুমোদন (যেমন Google, Facebook)।
  • নিরাপদ ডেটা শেয়ারিং।
  • ব্যবহারকারীর ডেটার উপর নিয়ন্ত্রণ।

কাজের ধাপ

  1. ব্যবহারকারী একটি তৃতীয় পক্ষের পরিষেবায় লগইন করে।
  2. তৃতীয় পক্ষ একটি Access Token প্রদান করে।
  3. ক্লায়েন্ট এই টোকেন ব্যবহার করে সার্ভারের ডেটা অ্যাক্সেস করে।

উদাহরণ

ASP.NET Core-এ OAuth ইমপ্লিমেন্ট করার জন্য Microsoft.AspNetCore.Authentication.OAuth প্যাকেজ ব্যবহার করা হয়।

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddGoogle(options =>
{
    options.ClientId = "yourClientId";
    options.ClientSecret = "yourClientSecret";
});

Authentication এর তুলনা

পদ্ধতিবৈশিষ্ট্যব্যবহারের ক্ষেত্র
Cookie-basedসার্ভারে সেশন সংরক্ষণ এবং ক্লায়েন্টে Cookie ব্যবহার করে।ছোট ওয়েব অ্যাপ্লিকেশন।
JWTStateless, ক্লায়েন্টে টোকেন সংরক্ষণ এবং প্রতিটি অনুরোধে পাঠানো হয়।RESTful API এবং মাইক্রোসার্ভিস।
OAuthতৃতীয় পক্ষের পরিষেবা থেকে Access Token ব্যবহার করে।বহিরাগত পরিষেবার মাধ্যমে ডেটা অ্যাক্সেস।

Authentication এর সুবিধা

  • নিরাপত্তা: ব্যবহারকারীর বৈধতা নিশ্চিত করে।
  • স্কেলযোগ্যতা: JWT এবং OAuth-এর মতো পদ্ধতি সার্ভার লোড কমায়।
  • মডুলারিটি: বিভিন্ন Authentication স্কিম সহজেই ইমপ্লিমেন্ট করা যায়।

Authentication অ্যাপ্লিকেশনের নিরাপত্তার মূল ভিত্তি এবং এটি ব্যবহারকারীর অভিজ্ঞতা উন্নত করার পাশাপাশি ডেটার সুরক্ষাও নিশ্চিত করে।

common.content_added_by

ASP.NET Core Identity ব্যবহার করে Authentication ইমপ্লিমেন্ট করা

292
292

ASP.NET Core Identity একটি শক্তিশালী লাইব্রেরি যা ASP.NET Core অ্যাপ্লিকেশনগুলিতে ব্যবহারকারীর অথেনটিকেশন এবং অথোরাইজেশন ব্যবস্থা পরিচালনা করার জন্য ব্যবহৃত হয়। এটি ব্যবহারকারীর লগইন, লগআউট, রেজিস্ট্রেশন, পাসওয়ার্ড রিসেট এবং অন্যান্য সিকিউরিটি ফিচার পরিচালনা করার জন্য অনেকগুলি বিল্ট-ইন ফিচার প্রদান করে।

এই টিউটোরিয়ালে আমরা ASP.NET Core Identity ব্যবহার করে Authentication কিভাবে ইমপ্লিমেন্ট করতে হয় তা দেখবো।


ASP.NET Core Identity কী?

ASP.NET Core Identity হলো একটি পূর্ণাঙ্গ অথেনটিকেশন এবং অথোরাইজেশন সিস্টেম যা ব্যবহারকারীর রেজিস্ট্রেশন, লগইন, পাসওয়ার্ড ম্যানেজমেন্ট এবং আরও অনেক ফিচার সরবরাহ করে। এটি আপনাকে টোকেন-ভিত্তিক অথেনটিকেশন, কুকি-বেসড অথেনটিকেশন, এবং Identity Provider Integration (OAuth, OpenID Connect) ইত্যাদি ফিচার ইমপ্লিমেন্ট করতে সহায়তা করে।


ASP.NET Core Identity কনফিগারেশন

ASP.NET Core Identity কনফিগার করতে হলে কিছু নির্দিষ্ট পদক্ষেপ অনুসরণ করতে হয়। এখানে আমরা একটি সাধারণ অ্যাপ্লিকেশনে Identity সিস্টেম কনফিগার করবো।


1. ASP.NET Core Identity প্যাকেজ ইন্সটল করা

প্রথমে আপনার ASP.NET Core প্রজেক্টে Identity প্যাকেজ ইনস্টল করতে হবে।

NuGet Package Manager ব্যবহার করে:

Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore

CLI ব্যবহার করে:

dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore

2. DbContext কনফিগার করা

Identity সিস্টেম ব্যবহার করতে হলে DbContext কনফিগার করতে হবে যাতে Identity ডেটাবেসে সংরক্ষণ করতে পারে। এটি সাধারণত ApplicationDbContext নামক একটি ক্লাস হিসেবে থাকে, যা IdentityDbContext ক্লাস থেকে উত্তরাধিকারী।

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

এখানে ApplicationUser হচ্ছে একটি কাস্টম ইউজার ক্লাস, যেটি IdentityUser থেকে উত্তরাধিকারী হতে পারে। আপনি যদি কাস্টম ইউজার প্রোপার্টি চান, তবে এই ক্লাসে নতুন প্রোপার্টি যোগ করতে পারেন।

public class ApplicationUser : IdentityUser
{
    public string FullName { get; set; }
}

3. Startup.cs বা Program.cs ফাইলে Identity কনফিগার করা

ASP.NET Core Identity কনফিগার করার জন্য Startup.cs বা Program.cs ফাইলে সেবা রেজিস্টার এবং কনফিগার করতে হবে। এটি Identity এবং DbContext-কে পরিষেবা হিসাবে রেজিস্টার করবে।

Program.cs ফাইলে কনফিগারেশন:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Startup.cs ফাইলের কনফিগারেশন:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

        // Identity Service রেজিস্টার করা
        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultUI()
            .AddDefaultTokenProviders();

        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();

        app.UseAuthentication(); // Authentication Middleware যোগ করা
        app.UseAuthorization(); // Authorization Middleware যোগ করা

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages(); // Identity Razor Pages
        });
    }
}

4. Identity UI এর সাথে কাজ করা

ASP.NET Core Identity UI কে আপনার অ্যাপ্লিকেশনে যোগ করতে চাইলে আপনাকে Razor Pages ব্যবহার করতে হবে। আপনি Identity UI প্যাকেজ ব্যবহার করতে পারেন।

Identity UI প্যাকেজ ইন্সটল করতে:

dotnet add package Microsoft.AspNetCore.Identity.UI

এটি রেজিস্ট্রেশন, লগইন, লগআউট, পাসওয়ার্ড পরিবর্তন, ইমেইল ভেরিফিকেশন ইত্যাদি সম্পন্ন করার জন্য প্রয়োজনীয় Razor Pages প্রদান করে।


5. রেজিস্ট্রেশন এবং লগইন ফিচার

ASP.NET Core Identity রেজিস্ট্রেশন এবং লগইন সিস্টেমটি প্রি-বিল্ট Razor Pages এবং কন্ট্রোলার সহ আসে। আপনি যদি UI ব্যবহার না করেন এবং নিজস্ব কাস্টম UI তৈরি করতে চান, তবে আপনি IdentityManager API এর মাধ্যমে ইউজার তৈরি এবং লগইন করতে পারেন।

৫.১ রেজিস্ট্রেশন Controller:

public class AccountController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly SignInManager<ApplicationUser> _signInManager;

    public AccountController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }

    // Register Action
    [HttpPost]
    public async Task<IActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await _userManager.CreateAsync(user, model.Password);

            if (result.Succeeded)
            {
                await _signInManager.SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            foreach (var error in result.Errors)
            {
                ModelState.AddModelError(string.Empty, error.Description);
            }
        }
        return View(model);
    }
}

৫.২ লগইন Controller:

public class AccountController : Controller
{
    private readonly SignInManager<ApplicationUser> _signInManager;

    public AccountController(SignInManager<ApplicationUser> signInManager)
    {
        _signInManager = signInManager;
    }

    // Login Action
    [HttpPost]
    public async Task<IActionResult> Login(LoginViewModel model)
    {
        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
            
            if (result.Succeeded)
            {
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            }
        }
        return View(model);
    }
}

সারাংশ

ASP.NET Core Identity ব্যবহার করে অ্যাপ্লিকেশনে শক্তিশালী অথেনটিকেশন সিস্টেম ইমপ্লিমেন্ট করা সম্ভব। Identity আপনার অ্যাপ্লিকেশনে ইউজার রেজিস্ট্রেশন, লগইন, লগআউট, পাসওয়ার্ড পরিবর্তন এবং নিরাপত্তা ব্যবস্থা পরিচালনা করতে সহায়তা করে। আপনি কাস্টম UI তৈরি করতে পারেন বা Identity UI প্যাকেজ ব্যবহার করে প্রি-বিল্ট UI ফিচার পেতে পারেন। ASP.NET Core Identity এর মাধ্যমে সিকিউরিটি ফিচার ইমপ্লিমেন্ট করা সহজ এবং নিরাপদ।

common.content_added_by

Authorization পলিসি এবং কাস্টম রোলস

224
224

ASP.NET Core-এ Authorization হলো নিরাপত্তা নিশ্চিত করার একটি গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনে অ্যাক্সেস নিয়ন্ত্রণ করতে সহায়তা করে। Authorization পলিসি এবং কাস্টম রোলস ব্যবহার করে আপনি নির্দিষ্ট ব্যবহারকারীদের জন্য নির্দিষ্ট অ্যাক্সেস কন্ট্রোল তৈরি করতে পারেন। এখানে আমরা Authorization পলিসি এবং কাস্টম রোলস সম্পর্কে বিস্তারিত আলোচনা করব।


Authorization পলিসি

Authorization পলিসি ASP.NET Core-এ একটি উচ্চতর কৌশল যা রোল, ক্লেইম বা কাস্টম শর্তাবলী অনুযায়ী ব্যবহারকারীর অ্যাক্সেস অনুমতি বা অস্বীকার করতে ব্যবহৃত হয়। পলিসি এক বা একাধিক শর্তাবলী দিয়ে গঠিত হতে পারে, এবং এটি অনুমোদন সিদ্ধান্ত নেয়ার সময় ব্যবহার হয়।

পলিসি তৈরি করা

  1. ConfigureServices মেথডে পলিসি তৈরি করা: পলিসি তৈরির জন্য প্রথমে AddAuthorization মেথড ব্যবহার করে services কনফিগারেশন ফাইলে পলিসি রেজিস্টার করতে হবে। এখানে আমরা একটি সাধারণ কাস্টম পলিসি তৈরি করব যা রোল ভিত্তিক।

    উদাহরণ:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthorization(options =>
        {
            options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
            options.AddPolicy("ManagerOnly", policy => policy.RequireRole("Manager"));
        });
    
        services.AddControllersWithViews();
    }
    

    এখানে, AdminOnly পলিসিটি নিশ্চিত করবে যে শুধুমাত্র Admin রোলধারী ব্যবহারকারীরা অ্যাক্সেস করতে পারবে।

পলিসি প্রয়োগ করা

পলিসি প্রয়োগ করতে আপনি [Authorize] অ্যাট্রিবিউট ব্যবহার করবেন এবং পলিসির নাম উল্লেখ করবেন।

Controller Action-এ পলিসি প্রয়োগ করা:

[Authorize(Policy = "AdminOnly")]
public IActionResult AdminDashboard()
{
    return View();
}

এখানে, AdminOnly পলিসি শুধুমাত্র Admin রোলধারী ব্যবহারকারীদের AdminDashboard অ্যাক্সেস করতে দেবে।

পলিসি চেক করা

আপনি IAuthorizationService ব্যবহার করে কোডের মধ্যে পলিসি চেক করতে পারেন, যাতে রUNTIME-এ পলিসি যাচাই করা যায়।

public class MyController : Controller
{
    private readonly IAuthorizationService _authorizationService;

    public MyController(IAuthorizationService authorizationService)
    {
        _authorizationService = authorizationService;
    }

    public async Task<IActionResult> SomeAction()
    {
        var result = await _authorizationService.AuthorizeAsync(User, null, "AdminOnly");
        if (result.Succeeded)
        {
            // অ্যাক্সেস অনুমোদিত
            return View();
        }
        else
        {
            // অ্যাক্সেস অস্বীকৃত
            return Forbid();
        }
    }
}

কাস্টম রোলস

ASP.NET Core-এ Roles ব্যবহার করা হয় ব্যবহারকারীদের বিশেষ ভূমিকা (role) নির্ধারণের জন্য, যাতে নির্দিষ্ট রোলধারী ব্যবহারকারীরা নির্দিষ্ট অ্যাক্সেস পেতে পারেন। কাস্টম রোলস তৈরি এবং ব্যবহার করার জন্য আপনাকে কিছু কনফিগারেশন করতে হবে।

কাস্টম রোলস তৈরি করা

  1. Identity সিস্টেম ব্যবহার করলে, আপনি RoleManager ব্যবহার করে কাস্টম রোল তৈরি করতে পারেন।
  2. ConfigureServices মেথডে Identity সিস্টেম কনফিগার করতে হবে:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
    
        services.AddAuthorization(options =>
        {
            options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
        });
    
        services.AddControllersWithViews();
    }
    

কাস্টম রোল তৈরি ও অ্যাসাইন করা

  1. RoleManager ব্যবহার করে কাস্টম রোল তৈরি করা:

    public class RoleInitializer
    {
        public static void Initialize(IServiceProvider serviceProvider, UserManager<ApplicationUser> userManager)
        {
            var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
    
            string[] roleNames = { "Admin", "Manager", "User" };
            foreach (var roleName in roleNames)
            {
                var roleExist = roleManager.RoleExistsAsync(roleName).Result;
                if (!roleExist)
                {
                    var role = new IdentityRole(roleName);
                    var roleResult = roleManager.CreateAsync(role).Result;
                }
            }
        }
    }
    

    এখানে, আপনি "Admin", "Manager", "User" নামে কাস্টম রোল তৈরি করছেন।

  2. রোল অ্যাসাইন করা: ব্যবহারকারীর জন্য রোল অ্যাসাইন করার জন্য UserManager ব্যবহার করা হয়।

    public async Task<IActionResult> AssignRoleToUser(string userId)
    {
        var user = await _userManager.FindByIdAsync(userId);
        if (user != null)
        {
            var result = await _userManager.AddToRoleAsync(user, "Admin");
            if (result.Succeeded)
            {
                return RedirectToAction("Index");
            }
        }
        return View("Error");
    }
    

কাস্টম রোল এবং পলিসি একসাথে ব্যবহার

ASP.NET Core-এ কাস্টম রোলস এবং পলিসি একসাথে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, আপনি একটি পলিসি তৈরি করতে পারেন যা Admin রোল এবং একটি নির্দিষ্ট ক্লেইম প্রয়োজন।

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("AdminWithSpecialClaim", policy =>
            policy.RequireRole("Admin").RequireClaim("SpecialClaim", "true"));
    });
}

এখানে, পলিসি Admin রোলধারী ব্যবহারকারী এবং একটি নির্দিষ্ট ক্লেইম চেক করবে। যদি ব্যবহারকারীর কাছে SpecialClaim ক্লেইম না থাকে, তবে অ্যাক্সেস অস্বীকার করা হবে।


সারাংশ

ASP.NET Core-এ Authorization পলিসি এবং কাস্টম রোলস ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনটিকে আরও নিরাপদ এবং নমনীয় করতে পারেন। পলিসির মাধ্যমে আপনি একটি শক্তিশালী নিরাপত্তা মডেল তৈরি করতে পারেন, যেখানে ব্যবহারকারীদের রোল, ক্লেইম বা অন্যান্য শর্তাবলী অনুসারে অ্যাক্সেস নিয়ন্ত্রণ করা হয়। কাস্টম রোলস ব্যবহার করে আপনি অ্যাপ্লিকেশনে ব্যবহারকারীদের জন্য নির্দিষ্ট ভূমিকা নির্ধারণ করতে পারেন, যা নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল ব্যবস্থাকে আরও উন্নত করে।

common.content_added_by

ক্লেইম ভিত্তিক Authorization

220
220

ক্লেইম ভিত্তিক Authorization হলো ASP.NET Core-এর একটি উন্নত নিরাপত্তা ফিচার, যা ব্যবহারকারীর পরিচয় এবং তাদের অধিকার যাচাই করতে ক্লেইম (Claims) ব্যবহার করে। ক্লেইম একটি কী-ভ্যালু জোড়া, যা ব্যবহারকারীর কিছু নির্দিষ্ট বৈশিষ্ট্য বা অনুমতি প্রকাশ করে। উদাহরণস্বরূপ, Role, Email, Department বা Permission ক্লেইম হতে পারে।

ASP.NET Core-এ ক্লেইম ভিত্তিক Authorization ব্যবহার করে নির্দিষ্ট ক্লেইমযুক্ত ব্যবহারকারীদের অ্যাক্সেস প্রদান করা হয়। এটি Policy-based Authorization এর মাধ্যমে বাস্তবায়ন করা হয়।


ক্লেইম এবং Authorization কীভাবে কাজ করে

  1. ক্লেইম যোগ করা:
    একটি ব্যবহারকারীর জন্য বিভিন্ন ক্লেইম যোগ করা হয়, যা তাদের পরিচয় এবং অনুমতি নির্ধারণ করে।
  2. পলিসি তৈরি করা:
    একটি পলিসি তৈরি করা হয়, যা নির্দিষ্ট ক্লেইমের ভিত্তিতে ব্যবহারকারীর অ্যাক্সেস নির্ধারণ করে।
  3. অ্যাক্সেস কন্ট্রোল:
    Controller বা Action-এ পলিসি প্রয়োগ করে নির্ধারণ করা হয়, কোন ব্যবহারকারীর অ্যাক্সেস থাকবে।

ক্লেইম যোগ করার পদ্ধতি

Authentication Middleware-এ ক্লেইম যোগ করা

যখন ব্যবহারকারী সাইন ইন করে, তখন তাদের পরিচয়ের সাথে ক্লেইম যুক্ত করা হয়। নিচে একটি উদাহরণ দেওয়া হলো যেখানে ClaimsIdentity ব্যবহার করা হয়েছে:

var claims = new List<Claim>
{
    new Claim(ClaimTypes.Name, "John Doe"),
    new Claim(ClaimTypes.Role, "Admin"),
    new Claim("Department", "HR")
};

var identity = new ClaimsIdentity(claims, "CustomAuth");
var principal = new ClaimsPrincipal(identity);

await HttpContext.SignInAsync(principal);

এখানে, ClaimTypes.Role এবং কাস্টম ক্লেইম Department ব্যবহার করে একটি পরিচয় তৈরি করা হয়েছে।


ক্লেইম ভিত্তিক পলিসি তৈরি করা

ASP.NET Core-এ ক্লেইম ভিত্তিক পলিসি তৈরি করতে হলে AddAuthorization মেথডে পলিসি যোগ করতে হবে।

উদাহরণ:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("HROnly", policy =>
            policy.RequireClaim("Department", "HR"));
    });

    services.AddControllersWithViews();
}

উপরের উদাহরণে, HROnly পলিসিটি এমন ব্যবহারকারীদের জন্য প্রযোজ্য, যাদের ক্লেইম Department এর মান "HR"।


ক্লেইম ভিত্তিক পলিসি প্রয়োগ করা

Controller বা Action-এ পলিসি প্রয়োগ করা:

[Authorize(Policy = "HROnly")]
public IActionResult HRDashboard()
{
    return View();
}

এখানে, শুধুমাত্র "HR" বিভাগে থাকা ব্যবহারকারীরাই HRDashboard অ্যাক্সেস করতে পারবে।

Runtime-এ পলিসি যাচাই করা:

public async Task<IActionResult> CheckPolicy()
{
    var result = await _authorizationService.AuthorizeAsync(User, null, "HROnly");

    if (result.Succeeded)
    {
        return View("Success");
    }
    else
    {
        return View("AccessDenied");
    }
}

একাধিক ক্লেইম চেক করা

ASP.NET Core-এ একাধিক ক্লেইম চেক করতে হলে, পলিসিতে একাধিক শর্ত যোগ করা যেতে পারে।

উদাহরণ:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("AdminAndHR", policy =>
            policy.RequireClaim(ClaimTypes.Role, "Admin")
                  .RequireClaim("Department", "HR"));
    });
}

উপরের পলিসিটি এমন ব্যবহারকারীদের অনুমতি দেয়, যারা Admin রোলধারী এবং একইসাথে HR বিভাগে কাজ করে।


কাস্টম ক্লেইম পলিসি হ্যান্ডলার

ক্লেইম চেক করার জন্য একটি Custom Policy Handler তৈরি করা যেতে পারে, যা জটিল শর্তাবলী যাচাই করতে সহায়তা করে।

কাস্টম হ্যান্ডলার তৈরি:

public class MinimumExperienceHandler : AuthorizationHandler<MinimumExperienceRequirement>
{
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MinimumExperienceRequirement requirement)
    {
        var experienceClaim = context.User.FindFirst("Experience");

        if (experienceClaim != null && int.Parse(experienceClaim.Value) >= requirement.MinimumYears)
        {
            context.Succeed(requirement);
        }

        return Task.CompletedTask;
    }
}

public class MinimumExperienceRequirement : IAuthorizationRequirement
{
    public int MinimumYears { get; }

    public MinimumExperienceRequirement(int years)
    {
        MinimumYears = years;
    }
}

হ্যান্ডলার এবং পলিসি রেজিস্টার:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("Experienced", policy =>
            policy.Requirements.Add(new MinimumExperienceRequirement(5)));
    });

    services.AddSingleton<IAuthorizationHandler, MinimumExperienceHandler>();
}

সারসংক্ষেপ

ক্লেইম ভিত্তিক Authorization ASP.NET Core-এর একটি শক্তিশালী ফিচার, যা ব্যবহারকারীর নির্দিষ্ট বৈশিষ্ট্যের ভিত্তিতে অ্যাক্সেস নিয়ন্ত্রণ করে। এর মাধ্যমে:

  • ব্যবহারকারীদের নির্দিষ্ট ক্লেইম অনুযায়ী পলিসি প্রয়োগ করা যায়।
  • কাস্টম শর্তাবলী চেক করার জন্য কাস্টম হ্যান্ডলার তৈরি করা যায়।

ক্লেইম ভিত্তিক Authorization ব্যবহার করে আপনি নিরাপত্তা নিশ্চিত করার পাশাপাশি অ্যাপ্লিকেশনে নমনীয় অ্যাক্সেস কন্ট্রোল মডেল তৈরি করতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion